import time

# \t等同于按tab 可使多行字符串对齐
print("hello\tworld")
print("itheima\tbest")

# （由三个单引号 ''' 或三个双引号 """ 包围的文本块）多行字符串，被视为一种实现多行注释的技巧
print(
    """多行字符串
    看看多行
    再来一个"""
)

# 转义
name = '"zhangsan"'
print(name)

# 对str进行切片，从头开始，到尾结束，步长-1
print(name[::-1], "反转")
print("------------------------------")
"""
%s 将变量变成字符串 放入占位的地方
%d 将变量变成整数 放入占位的地方    %5d 整数位数5位，前面用空格补足
%f 将变量变成浮点数 放入占位的地方  %5.2f 宽度为5 保留两位小数，四舍五入  %.2f 只限制含2位小数
"""
message1 = "我的名字是 %s" % name
height = 175
age = 19
message2 = "我的年龄是 %s 身高为 %d 直接写 %d" % (age, height, 175)
print(message1, message2)

# 和上面的做对比(推荐直接这么用)
print("我叫 %s 今年 %d 岁，攒了%.2f元钱!" % ("小明", 10, 395.685))

# f-string 是 python3.6 之后版本添加的，是新的格式化字符串的语法。
# 用了这种方式明显更简单了，不用再去判断使用 %s，还是 %d
# 字符串格式化-快速（无法精度控制!!!）
# f"内容{变量}"    f:format
print(f"快速填入变量--我的年龄{age},身高{height}")

print("------------------------------")
"""
第五注释
第六注释
"""

# 如果语句很长，我们可以使用反斜杠 \ 来实现多行语句
total = 1 + 2 + 3
print(total)
print("-" * 40)

# 反斜杠可以用来转义，使用 r 可以让反斜杠不发生转义
# 用 + 运算符连接在一起，用 * 运算符重复。
# 字符串的截取：变量[头下标:尾下标:步长]
strTest = "123456789"
print(strTest[0:-1])  # 输出第一个到倒数第二个的所有字符
print(strTest[0] * 2)  # 输出字符串第一个字符
print(strTest[2:])  # 输出从第三个开始后的所有字符
print(strTest[2:])
print(
    "hello\nrunoob", end=" "
)  # 使用反斜杠(\)+n转义特殊字符//  print 默认输出是换行的，如果要实现不换行需要在变量末尾加上 end=""：
print(r"hello\nrunoob")  # 在字符串前面添加一个 r，表示原始字符串，不会发生转义 r 指 raw，即 raw string
print("-" * 40)

# 在同一行中使用多条语句，语句之间使用分号 ; 分割
# import sys; x = 'runoob'; sys.stdout.write(x + '\n')

# 赋值
a = b = c = 1  # 赋同一值
d, e, f, g = 20, 5.5, True, 4 + 3j  # 分别赋值
print(a, b, c)
print(d, e, f, g)
print(type(d), type(e), type(f), type(g))  # 内置的 type() 函数可以用来查询变量所指的对象类型。
print("------------------------------")

# 判断字符串里有某个值
testStr = "abcd"
if "a" in testStr:
    print("a在待测串中")
if "M" not in testStr:
    print("M 不在变量 testStr 中")
print("------------------------------")

# 字符串也可以用for来遍历
name = 'abacdefga'
count = 0
for i in name:
    if i == 'a':
        count += 1
print(f'a有{count}个')
print("------------------------------")

# \r 	回车 将 \r 后面的内容移到字符串开头，并逐一替换开头部分的字符
# >>> print("Hello\rWorld!")
# World!
# ------------python2.x range() 函数可创建一个整数列表------------------------
# --Python3 range() 返回的是一个可迭代对象（类型是对象），而不是列表类型------------
for i in range(101):
    # {:3} 的作用是占3位 并把i放进去
    print("\r{:3}%".format(i), end=" ")
    time.sleep(0.05)
print("------------------------------")

"""
演示以数据容器的角色，学习字符串的相关操作
"""
my_str = "itheima and itcast"
# 通过下标索引取值
value = my_str[2]
value2 = my_str[-16]
print(f"从字符串{my_str}取下标为2的元素，。值是：{value},取下标为-16的元素。值是：{value2}")

# my_str[2] = "H"

# index方法
value = my_str.index("and")
print(f"在字符串{my_str}中查找and，其起始下标是：{value}")

# replace方法
new_my_str = my_str.replace("it", "程序")
print(f"将字符串{my_str}，进行替换后得到：{new_my_str}")

# split方法
my_str = "hello python itheima itcast"
my_str_list = my_str.split(" ")
print(f"将字符串{my_str}进行split切分后得到：{my_str_list}, 类型是：{type(my_str_list)}")

# strip方法
my_str = "  itheima and itcast  "
new_my_str = my_str.strip() # 不传入参数，去除首尾空格
print(f"字符串{my_str}被strip后，结果：{new_my_str}")

my_str = "12itheima and itcast21"
new_my_str = my_str.strip("12")
print(f"字符串{my_str}被strip('12')后，结果：{new_my_str}") # itheima and itcast

# 统计字符串中某字符串的出现次数, count
my_str = "itheima and itcast"
count = my_str.count("it")
print(f"字符串{my_str}中it出现的次数是：{count}")
# 统计字符串的长度, len()
num = len(my_str)
print(f"字符串{my_str}的长度是：{num}")
